package annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented  //说明该注解将被包含在javadoc中
/**
 * ElementType的类型可以为   可以在对应的定义上使用，其它地方不可使用
 * 1.ElementType.TYPE 可以在接口，类，枚举，注解
 * 2.ElementType.FIELD 可以在字段(域)上使用
 * 3.ElementType.METHOD 可以在方法上使用
 * 4.ElementType.PARAMETER 可以在参数上使用
 * 5.ElementType.CONSTRUCTOR 可以在构造函数上使用
 * 6.ElementType.LOCAL_VARIABLE 可以在局部变量上使用
 * 7.ElementType.ANNOTATION_TYPE 可以在注解上使用
 * 8.ElementType.PACKAGE 可以在包上使用
 */
@Target(ElementType.METHOD)
@Inherited   //说明子类可以继承父类中的该注解
/**
 * 1.RetentionPolicy.SOURCE  注解仅存在于源码中，在class字节码文件中不包含
 * 2.RetentionPolicy.CLASS 默认的保留策略，注解会在class字节码文件中存在，但运行时无法获得
 * 3.RetentionPolicy.RUNTIME 注解会在class字节码文件中存在，在运行时可以通过反射获取到
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo {
	
	String author() default "tom";
	String date();
	int revision() default 1;
	String comments();
	
}
